分组: 按照某个字段或多个字段进行分组,字段中值相等的为一组,然后将这一组合并成一条数据
分组的作用: 一般用来统计数据 和 对查询到的数据进去重
聚合函数: -> 分组一般和聚合函数搭配着使用
- avg() -> 返回平均值
- count() -> 返回一共有多少条数据,在使用count的时候最好只传 1 (这个1在下面聚合函数的使用的第二个例子有进行说明) 或 主键的字段名
- max() -> 返回最大值
- min() -> 返回最小值
- sum() -> 返回和
对于聚合函数的结果进行条件的筛选只能使用 having 关键字,不能使用 where。(可以在分组语句中使用 where 条件筛选,但是 where 后面不能是聚合函数的结果,且 where 条件筛选必须在 group by 前面,先进行筛选再进行分组)
最好将以聚合函数方式命名的列名使用 as 起别名的方式重新修改一下列名,这样会看起来更明白一下
在使用分组返回数据的时候,需要返回的数据最好不要有冲突的,例如以部门为前提将相同部门的分成一组,而此时如果你想将id展示出来那么就会报错,因为相同部门的数据已经分成了一组,它不知道返回这一组数据中哪一个id给你
该表的所有数据

1. 聚合函数的使用
- 统计该表有多少条数据
select count(id) as total from staff;

- 在进行数据统计的时候有些人会直接协程 count( 常量->数字 ),这样也是可以统计出来的。因为在前面也提到过在查询数据的过程中写了一个常量(数字),那么该常量就会形成一个新的列,而这一新列也是可以被计算出总数的
select count(1) as total from staff;

- 查询该表中年纪最大的
select * from staff where age in (select max(age) from staff);

2. 分组的使用
- 统计各个部门的人数
# select 字段名, 聚合函数(字段名) from 表名 group by 需要进行统计的字段名;
select department,count(department) as quantity from staff group by department;

- 统计男生年龄小于25岁的个数 -> 可以在分组语句中使用 where 条件筛选,但是 where 后面不能是聚合函数的结果
select sex,count(sex) as quantity from staff where age < 25 and sex = '男' group by sex;

- 显示部门人数大于2的部门 -> 对于聚合函数的结果进行条件的筛选只能使用 having 关键字
# select 字段名, 聚合函数(字段名) from 表名 group by 需要进行统计的字段名 having 使用聚合函数结果进行判断的条件;
select department,count(department) as quantity from staff group by department having count(department) >= 2;

← distinct 去重 like 模糊查询 →